#ifndef __MVS_SPEC_2WV_H__
#define __MVS_SPEC_2WV_H__

#include "mvdef.h"

MVCXX_EXTERN_BEGIN

typedef enum _iotc_evt_two_way_video_act
{
    IOTC_EVT_2WV_INVALID = 0,
    IOTC_EVT_2WV_CALL    = 1, ///< 呼叫
    IOTC_EVT_2WV_HANGUP  = 2, ///< 挂断
}iotc_evt_2wv_act_e;
typedef enum _iotc_evt_two_way_video_call_tunnel
{
    IOTC_EVT_2WV_CT_NONE   = 0,
    /** 通用双向类 */
    IOTC_EVT_2WV_CT_RT     = 1, ///< 实时消息通道
    IOTC_EVT_2WV_CT_MSG,        ///< 推送消息通道
    /** 门铃类 */
    IOTC_EVT_2WV_CT_RT_DB,      ///< 实时消息通道(DOORBELL专用)
    IOTC_EVT_2WV_CT_MSG_DB,     ///< 推送消息通道(DOORBELL专用)
}iotc_evt_2wv_ct_e;
typedef struct _iotc_evt_two_way_video_arg
{
    /** 公共数据 */
    mv_u64_t     u64_uid;                     ///< 目标UID
    mv_u8_t      u8_call_tunnel;              ///< 呼叫通道 [iotc_evt_2wv_ct_e]
    mv_u8_t      u8_to_type;                  ///< UID对象类型（1=UID; 2=CID）
    mv_u32_t     u32_callid;                  ///< call非0随机数，请求端用来匹配接入请求是否由本机发起且有效的
    mv_cv8ptr_t  cpv8_myname;                 ///< 本机名称
    mv_u16_t     u16_myname_len;
    mv_u16_t     u16_toname_len;
    mv_cv8ptr_t  cpv8_toname;                 ///< 目标名称(CID时必要)
    mv_u8_t      au8_db_quick_reply_list[16]; ///< 门铃类快捷回复列表，0=截止（同DPID_AUDIO_QUICK_REPLY_CONTENT）
    /** 仅MSG通道专用数据，且目标为CID时不可用 */
    struct {
        mv_s64_t s64_call_ts_utc0;            ///< 呼叫当前时间点（Unix标准时间戳，秒）
        mv_s16_t s16_tz;                      ///< 呼叫当时时间点设备当前时区（±HHMM , 如东八区：＋0800，如西五区半：-0530）
        mv_s8_t  s8_is_dst;                   ///< 呼叫当时瞬时是否启用DST(不大于0则为关闭；大于0则为夏令时+N)
    }date;
    mv_u8ptr_t   pu8_thumbnail;                ///< 呼叫缩略图，方便对方能看到本机呼叫情景（*可选）
    mv_s32_t     s32_thumbnail_len;            ///< 呼叫缩略图原始数据长度
}iotc_evt_2wv_arg_t;
/**
 * @brief 双向视频请求通知接口
 * 
 * @param cp_arg         [in] 双向视频必要参数
 * @param e_act          [in] 请求方式
 * @param s32_timeout_ms [in] 通知发送超时时间（毫秒）
 * @return 请求通知结果
 * - success : MV_EC_SUCCESS
 * -  failed : MV_EC_NOT_SUPPORT  (ABL_VIDEO_TWO_WAY_CALL未设置)
 *             MV_EC_INVALID_ARGS（cp_arg为NULL或e_act非法）
 *             MV_EC_TIMEOUT      (超时时间内通知失败)
 *             MV_EC_NOT_READY    (调用过于频繁)
 *             else (< 0)
 * @attention 仅MSG通道专用数据pu8_thumbnail指向的内存会被SDK内部使用完后自动销毁(仅返回成功状态下)，需要使用mvos_malloc申请；
 *            且申请时需要在实际长度基础上额外向后扩大"ALARM_PIC_PAD_RESERVE"长度!!!，SDK内部使用
 */
mv_s32_t mvs_spec_2wv_evt(const iotc_evt_2wv_arg_t *cp_arg, iotc_evt_2wv_act_e e_act, mv_s32_t s32_timeout_ms);

MVCXX_EXTERN_END

#endif
